package main

import (
	"reflect"
	"unsafe"
)


func main() {
	// 标准转换（安全）
	//  string to []byte
	s1 := "hello"
	b1 := []byte(s1)
	// []byte to string
	s2 := string(b1)

}

//强转换 （快）
// string 底层数据结构 字节(byte)数组
// []byte 底层数据结构 字节(byte)数组
func String2Bytes(s string) []byte {
	sh := (*reflect.StringHeader)(unsafe.Pointer(&s))
	bh := reflect.SliceHeader{
		Data:sh.Data,
		Len:sh.Len,
		Cap:sh.Len
	}
	return *(*[]byte)(unsafe.Pointer(&bh))
}

func Bytes2String(b []byte) string{
	return *(*string)(unsafe.Pointer(&b))
}

type stringStruct struct{
	str unsafe.Pointer
	len int
}
type slice struct{
	array unsafe.Pointer
	len int
	cap int
}

type StringHeader struct{
	Data unsafe.Pointer
	Len int
}

type SliceHeader struct {
	Data unsafe.Pointer
	Len int
	Cap int
}
